Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / NPC / Boss Sime / BossSlimeMovement.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BossSlimeMovement : MonoBehaviour
{
    //GameObjects
    private GameObject target; // player
    private OpenUpgrades openUpgrades;
    public GameObject goToUpgrades; // go to upgrades info

    //Animation
    private Animator myAnim;

    //Files
    private BossSlimeRangedAttack bossSlimeRangedAttack;

    //Floats
    public float moveForce = 2;
    public float moving = 2;
    public float stopped = 0;
    public float maxrange = 9;
    public float minrange = 2f; // so that the enemy doesn't push the player

    //Ints
    private int pointsIndex;

    //Bools
    public bool following = false;

    //Arrays
    private Vector3[] positionArray;

    void Start()
    {
        //Files
        bossSlimeRangedAttack = FindObjectOfType<BossSlimeRangedAttack>();
        openUpgrades = FindObjectOfType<OpenUpgrades>();

        //GameObjects
        target = GameObject.FindGameObjectWithTag("Player");
        goToUpgrades = GameObject.FindGameObjectWithTag("Open Upgrades");

        //Components
        myAnim = GetComponent<Animator>();

        //Arrays
        positionArray = new[] { new Vector3(-185.07f, -96.78f), new Vector3(-185.07f, -107.8f), new Vector3(-165.52f, -107.8f), new Vector3(-165.52f, -96.78f) };

        //Variables
        pointsIndex = 0;
    }

    void Update()
    {
        if (Vector3.Distance(transform.position, target.transform.position) <= maxrange && Vector3.Distance(transform.position, target.transform.position) > minrange)
        {
            FollowPlayer();
            openUpgrades.enabled = false;
            goToUpgrades.gameObject.SetActive(false);
            bossSlimeRangedAttack.enabled = true;
            following = true;
        }
        else if (Vector3.Distance(transform.position, target.transform.position) <= minrange)
        {
            AttackPlayerAnim();
            bossSlimeRangedAttack.enabled = false;
        }
        else if (Vector3.Distance(transform.position, target.transform.position) >= maxrange)
        {
            GoStartingPos();
            openUpgrades.enabled = true;
            goToUpgrades.gameObject.SetActive(true);
            following = false;
        }
    }

    public void FollowPlayer()
    {
        moveForce = moving;
        myAnim.SetBool("isMoving", true);
        myAnim.SetFloat("moveX", (target.transform.position.x - transform.position.x));
        myAnim.SetFloat("moveY", (target.transform.position.y - transform.position.y));
        transform.position = Vector3.MoveTowards(transform.position, target.transform.position, moveForce * Time.deltaTime);

    }

    public void AttackPlayerAnim()
    {
        moveForce = stopped;
        myAnim.SetBool("isMoving", false);
    }

    public void GoStartingPos()
    {
        moveForce = moving;
        myAnim.SetBool("isMoving", true);
        myAnim.SetFloat("moveX", (positionArray[pointsIndex].x - transform.position.x));
        myAnim.SetFloat("moveY", (positionArray[pointsIndex].y - transform.position.y));

        transform.position = Vector3.MoveTowards(transform.position, positionArray[pointsIndex], moveForce * Time.deltaTime);

        if (transform.position == positionArray[pointsIndex])
        {
            //Next point of the array of Locations
            pointsIndex++;
        }

        if (pointsIndex == (positionArray.Length))
        {
            //Going Back to the start point
            pointsIndex = 0;
        }
    }
}